package com.liangzhong.model.task
{
	import com.common.utils.TimeFrameUtil;
	import com.liangzhong.constants.ResourceConst;
	import com.liangzhong.constants.TaskConst;
	import com.liangzhong.events.TaskEvent;
	import com.liangzhong.manager.ResourceManager;
	import com.liangzhong.model.AppData;
	import com.liangzhong.model.task.vo.TaskInfoVo;
	
	import flash.events.Event;
	import flash.events.EventDispatcher;
	
	/**
	 *任务管理器 
	 * @author lake
	 * 
	 */	
	public class TaskManager extends EventDispatcher
	{
		protected var _taskInfos			:Array;
		protected var _acceptedList		:Array;
		public var taskConfigItems			:Array;//XML
		/**
		 *临时任务对象 
		 */		
		public var tempTaskObj				:*;
		
		
		
		
		
		
		/**
		 *任务列表 
		 */
		public var taskList:Array;
		
		/**
		 *已经接收的任务列表 
		 */
		public var acceptedList:Array;
		/**
		 *国家任务 
		 */
		public var nationTaskList:Array;
		
		public function TaskManager()
		{
			_taskInfos = [];
			_acceptedList = [];
			taskConfigItems = [];
			
			taskList = [];
			acceptedList = [];
			nationTaskList = [];
			TimeFrameUtil.instance.addMethod(onEnterFrame);
		}
		
		private function onEnterFrame(pTime :int):void
		{
			var config :XML = ResourceManager.instance.getResource(ResourceConst.TASKCONFIG);
			if(config == null)return;
			TimeFrameUtil.instance.removeMethod(onEnterFrame);
			initData();
		}
		/**
		 *初始化数据 
		 */		
		public function initData():void
		{
			var config :XML = ResourceManager.instance.getResource(ResourceConst.TASKCONFIG);
			if(config == null)throw new Error("Not find task config!");
			var itemList :XMLList = config.tb_task;
			var vo:TaskInfoVo;
			for each(var item :XML in itemList)
			{
				taskConfigItems.push(item);
			}
		}
		
		/**
		 *根据任务id 获取任务信息 
		 * @param tid
		 * @return 
		 * 
		 */		
		public function getTaskItemById(tid :int):XML
		{
			for each(var item :XML in taskConfigItems)
			{
				if(item.taskid == tid)
				{
					return item;
				}
			}
			return null;
		}
		
		/**
		 *获得已经接收的任务列表 
		 * 
		 */
		public function getAcceptTaskList($arr:Array):void
		{
			var len:int = $arr.length;
			var vo:TaskInfoVo;
			var obj:Object;
			for(var i:int = 0;i < len;i++)
			{
				obj = $arr[i];
				vo = new TaskInfoVo();
				var xml:XML = getTaskItemById(obj.taskid);
				if(xml == null)continue;
				vo.analysis(xml);
				vo.f_value1 = obj.value1;
				vo.f_value2 = obj.value2;
				vo.contime = obj.begintime;
//				vo.ntype = obj.ntype;
				vo.status = obj.status;
				if(vo.ntype == TaskConst.NATION_TASK)
				{
					nationTaskList.push(vo);
					AppData.getInstance().competeDataManager.issueNationTask(vo.taskid);
				}else
				{
					acceptedList.push(vo);
				}
//				if(vo.status == TaskConst.TASK_FINISH)
//				{
//					this.dispatchEvent(new TaskEvent(TaskEvent.TASK_FINISH_TASK,{vo:vo}));
//				}
				
				if(vo.f_value1 >= vo.value1 && vo.f_value2 >= vo.value2 ||vo.status == TaskConst.TASK_FINISH)
				{
					vo.status = TaskConst.TASK_FINISH;
//					this.dispatchEvent(new TaskEvent(TaskEvent.TASK_FINISH_TASK,{vo:vo}));
				}
				
			}
			//acceptedList.sortOn("ntype");
			acceptedList.sort(sort);
			function sort(a:TaskInfoVo,b:TaskInfoVo):Number
			{
				if(a.ntype < b.ntype)return -1;
				if(a.ntype > b.ntype)return 1;
				return 0;
			}
			this.dispatchEvent(new TaskEvent(TaskEvent.GET_TASK_LIST));
		}
		/**
		 *获取完成的任务列表vo 
		 * @return 
		 * 
		 */		
		public function getFinishTaskList():Array
		{
			var tres :Array = [];
			for each(var tInfo :TaskInfoVo in acceptedList)
			{
				if(tInfo.status == TaskConst.TASK_FINISH)
				{
					tres.push(tInfo);
				}
			}
			return tres;
		}
		/**
		 *接收到新任务 
		 * 
		 */
		public function getNewTask($id:int):void
		{
			
			var vo:TaskInfoVo;
			
			vo = new TaskInfoVo();
			vo.analysis(getTaskItemById($id));
			if(vo.ntype == TaskConst.NATION_TASK)
			{
				nationTaskList.push(vo);
				AppData.getInstance().competeDataManager.issueNationTask(vo.taskid);
				this.dispatchEvent(new TaskEvent(TaskEvent.ACCEPT_NATION_TASK));
			}else
			{
				acceptedList.push(vo);
				this.dispatchEvent(new TaskEvent(TaskEvent.UPDATE_TASK_LIST));
			}
			acceptedList.sortOn("ntype");
			
		}
		/**
		 *完成一个任务 
		 * @param $id
		 * 
		 */		
		public function finishTask($id:int):void
		{
			var vo:TaskInfoVo;
			var len:int = acceptedList.length;
			var i:int;
			for(i = 0;i < len;i++)
			{
				vo = acceptedList[i];
				if(vo.taskid == $id)
				{
					acceptedList.splice(i,1);
					this.dispatchEvent(new TaskEvent(TaskEvent.UPDATE_TASK_LIST));
					break;
				}
				
			}
			len = nationTaskList.length;
			for(i = 0;i < len;i++)
			{
				vo = nationTaskList[i];
				if(vo.taskid == $id)
				{
					nationTaskList.splice(i,1);
					this.dispatchEvent(new TaskEvent(TaskEvent.FINISH_NATION_TASK));
					break;
				}
			}
		}
		/**
		 *任务进度 
		 * @param $id
		 * @param $v1
		 * @param $v2
		 * 
		 */
		public function taskProgress($id:int,$v1:int,$v2:int):void
		{
			var vo:TaskInfoVo;
			var len:int = acceptedList.length;
			var i:int;
			for(i = 0;i < len;i++)
			{
				vo = acceptedList[i];
				if(vo.taskid == $id)
				{
					vo.f_value1 = $v1;
					vo.f_value2 = $v2;
					if(vo.f_value1 >= vo.value1 && vo.f_value2 >= vo.value2 && !vo.isShowFinishView)
					{
						vo.status = TaskConst.TASK_FINISH;
						vo.isShowFinishView = true;
						this.dispatchEvent(new TaskEvent(TaskEvent.TASK_FINISH_TASK,{vo:vo}));
					}
					this.dispatchEvent(new TaskEvent(TaskEvent.UPDATE_TASK_LIST));
					break;
				}
				
			}
			
			
			len = nationTaskList.length;
			for(i = 0;i < len;i++)
			{
				vo = nationTaskList[i];
				if(vo.taskid == $id)
				{
					vo.f_value1 = $v1;
					vo.f_value2 = $v2;
					if(vo.f_value1 >= vo.value1 && vo.f_value2 >= vo.value2)
					{
						vo.status = TaskConst.TASK_FINISH;
						vo.isShowFinishView = true;
//						this.dispatchEvent(new TaskEvent(TaskEvent.TASK_FINISH_TASK,{vo:vo}));
					}
//					this.dispatchEvent(new TaskEvent(TaskEvent.ACCEPT_NATION_TASK));
					break;
				}
			}
		}
		/**
		 *获取国家任务 
		 * 
		 */
		public function getNationTask($id:int):TaskInfoVo
		{
			var vo:TaskInfoVo;
			if(nationTaskList == null)return null;
			var len :int= nationTaskList.length;
			for(var i:int = 0;i < len;i++)
			{
				vo = nationTaskList[i];
				if(vo.taskid == $id)
				{
					return vo;
					break;
				}
			}
			return null;
		}
		
		//		/**
		//		 *临时 配置未加载完 列表先返回 
		//		 */		
		//		private var tempTaskList :Array;
		//		public function updateTaskList(tList :Array = null):void
		//		{
		//			if(tList == null)return;
		//			if(taskConfigItems.length == 0)
		//			{
		//				tempTaskList = tList;
		//				return;
		//			}
		//			tempTaskList = null;
		//			destroy();
		//			_acceptedList = [];
		//			//
		//			var i 		:int = 0;
		//			var tid 	:int = 0;
		//			var tItem :XML;
		//			var taskInfo :TaskInfoVo;
		//			var taskAward :TaskAwardVo;
		//			var awardScript :String = "";
		//			for each(var taskObj :Object in tList)
		//			{
		//				i++;
		//				tid = int(taskObj.tid);
		//				tItem = getTaskItemById(tid);
		//				if(tItem == null)continue;
		//				if(tItem.@type == TaskConst.GUIDE_TASK)continue;
		//				taskInfo = new TaskInfoVo();
		//				taskInfo.id 	= tid;
		//				taskInfo.name 	= tItem.@name;
		//				taskInfo.tips   = tItem.@tips;
		//				taskInfo.iconIndex = tItem.@icon;
		//				taskInfo.desc.taskDesc 		= tItem.@desc;
		//				taskInfo.desc.type 			= tItem.@type;
		//				taskInfo.desc.awardDesc 	= tItem.@awardDesc;
		//				taskInfo.desc.demandDesc 	= tItem.@demandDesc;
		//				taskInfo.desc.demand.type	= taskObj.verify[0].type;
		//				taskInfo.desc.demand.iconIndex = tItem.@icon;
		//				taskInfo.desc.demand.current = taskObj.verify[0].current;
		//				taskInfo.desc.demand.target = taskObj.verify[0].target;
		//				taskInfo.desc.demand.uids = taskObj.verify[0].uid;
		//				taskInfo.module = tItem.@module;
		//				taskInfo.moduleType = tItem.@moduleType;
		//				taskInfo.trackDesc = tItem.@trackDesc;
		//				awardScript = tItem.@awardScript;
		//				//解析xml奖励信息
		//				/*if(awardScript && awardScript.length > 0)
		//				{
		//				var awArrs :Array = awardScript.split(",");
		//				var dlArrs :Array;
		//				for each(var cts :String in awArrs)
		//				{
		//				dlArrs = cts.split("*");
		//				taskAward = new TaskAwardVo();
		//				taskAward.type = int(dlArrs[0]);
		//				taskAward.vals = Number(dlArrs[1]);
		//				taskInfo.desc.awards.push(taskAward);
		//				}
		//				}*/
		//				//解析server奖励信息
		//				var sRewards :Array = taskObj.award;
		//				for each(var sObj :Object in sRewards)
		//				{
		//					taskAward 		= new TaskAwardVo();
		//					taskAward.type 	= int(sObj.type);
		//					taskAward.vals 	= Number(sObj.num);
		//					taskAward.pid 	= sObj.pid;
		//					taskInfo.desc.awards.push(taskAward);
		//				}
		//				_acceptedList.push(taskInfo);
		//			}
		//			this.dispatchEvent(new Event(Event.CHANGE));
		//		}
		//		
		//		public function get acceptedList():Array
		//		{
		//			return _acceptedList;
		//		}
		
		//		/**
		//		 *设置一个新手任务 
		//		 * @param guideTask
		//		 * 
		//		 */		
		//		public function setNewGuideTask(guideTask :*):void
		//		{
		//			destroy();
		//			_acceptedList = [];
		//			//
		//			var i 		:int = 0;
		//			var tid 	:int = 0;
		//			var tItem :XML;
		//			var taskInfo :TaskInfoVo;
		//			var taskAward :TaskAwardVo;
		//			var awardScript :String = "";
		//			for each(var taskObj :Object in guideTask)
		//			{
		//				i++;
		//				tid = int(taskObj.tid);
		//				tItem = getTaskItemById(tid);
		//				if(tItem == null)continue;
		//				if(tItem.@type == TaskConst.GUIDE_TASK)
		//				{
		//					taskInfo = new TaskInfoVo();
		//					taskInfo.id 	= tid;
		//					taskInfo.name 	= tItem.@name;
		//					taskInfo.tips   = tItem.@tips;
		//					taskInfo.iconIndex = tItem.@icon;
		//					taskInfo.desc.taskDesc 		= tItem.@desc;
		//					taskInfo.desc.type 			= tItem.@type;
		//					taskInfo.desc.awardDesc 	= tItem.@awardDesc;
		//					taskInfo.desc.demandDesc 	= tItem.@demandDesc;
		//					taskInfo.module = tItem.@module;
		//					taskInfo.moduleType = tItem.@moduleType;
		//					taskInfo.trackDesc = tItem.@trackDesc;
		//					awardScript = tItem.@awardScript;
		//					taskInfo.desc.demand.current = 0;
		//					taskInfo.desc.demand.target = 1;
		//					//解析xml奖励信息
		//					if(awardScript && awardScript.length > 0)
		//					{
		//						var awArrs :Array = awardScript.split(",");
		//						var dlArrs :Array;
		//						for each(var cts :String in awArrs)
		//						{
		//							dlArrs = cts.split("*");
		//							taskAward = new TaskAwardVo();
		//							taskAward.type = int(dlArrs[0]);
		//							taskAward.vals = Number(dlArrs[1]);
		//							if(taskAward.type > 4)
		//							{
		//								taskAward.pid = taskAward.type;
		//								taskAward.type = TaskConst.TASK_AWARD_TYPE_ITEM;
		//							}
		//							taskInfo.desc.awards.push(taskAward);
		//						}
		//					}
		//					if(tempTaskObj)
		//					{
		//						taskInfo.desc.awards = [];
		//						//解析server奖励信息
		//						var sRewards :Array = tempTaskObj.award;
		//						for each(var sObj :Object in sRewards)
		//						{
		//							taskAward 		= new TaskAwardVo();
		//							taskAward.type 	= int(sObj.type);
		//							taskAward.vals 	= Number(sObj.num);
		//							taskAward.pid 	= sObj.pid;
		//							taskInfo.desc.awards.push(taskAward);
		//						}
		//						tempTaskObj = null;
		//					}
		//					_acceptedList.push(taskInfo);
		//				}
		//			}
		//			this.dispatchEvent(new Event(Event.CHANGE));
		//		}
		//		/**
		//		 *更新新手任务 
		//		 * 完成
		//		 */		
		//		public function updateGuideTask(tagetN :int = 1):void
		//		{
		//			var taskInfo :TaskInfoVo = _acceptedList[0];
		//			if(taskInfo)
		//			{
		//				taskInfo.desc.demand.current = taskInfo.desc.demand.target = tagetN;
		//				this.dispatchEvent(new Event(Event.CHANGE));
		//			}
		//		}
		//		/**
		//		 *更新引导奖励 
		//		 * @param sRewards
		//		 * http 返回
		//		 */		
		//		public function updateGuideAward(taskObj :*):void
		//		{
		//			var taskInfo :TaskInfoVo;
		//			var taskAward :TaskAwardVo;
		//			if(_acceptedList.length == 0)
		//			{
		//				tempTaskObj = taskObj;
		//				return;
		//			}
		//			taskInfo = _acceptedList[0];
		//			if(taskInfo == null || taskInfo.id != taskObj.tid)
		//			{
		//				tempTaskObj = taskObj;
		//				return;
		//			}
		//			taskInfo.desc.awards = [];
		//			//解析server奖励信息
		//			var sRewards :Array = taskObj.award;
		//			for each(var sObj :Object in sRewards)
		//			{
		//				taskAward 		= new TaskAwardVo();
		//				taskAward.type 	= int(sObj.type);
		//				taskAward.vals 	= Number(sObj.num);
		//				taskAward.pid 	= sObj.pid;
		//				taskInfo.desc.awards.push(taskAward);
		//			}
		//			this.dispatchEvent(new Event(Event.CHANGE));
		//		}
		//		/**
		//		 *重设新手任务 
		//		 * 
		//		 */		
		//		public function resetGuideTask():void
		//		{
		//			destroy();
		//			_acceptedList = [];
		//			this.dispatchEvent(new Event(Event.CHANGE));
		//		}
		//		/**
		//		 * 
		//		 * destroy();
		//		 */		
		//		private function destroy():void
		//		{
		//			for each(var tInfo :TaskInfoVo in _acceptedList)
		//			{
		//				tInfo.destroy();
		//				tInfo = null;
		//			}
		//		}
	}
}